package com.whfc.fim.dao;

import com.whfc.fim.dto.FimAlgCheckTypeDTO;
import com.whfc.fim.dto.FimAlgTypeDTO;
import com.whfc.fim.dto.FimResultRateContDTO;
import com.whfc.fim.dto.FimWarnRuleDTO;
import com.whfc.fim.entity.FimWarnRule;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author : qzexing
 * @version : 1.0
 * @date : 2020-09-08 18:38
 */

public interface FimWarnRuleMapper {
    int deleteByPrimaryKey(Integer id);

    int insert(FimWarnRule record);

    int insertSelective(FimWarnRule record);

    FimWarnRule selectByPrimaryKey(Integer id);

    List<FimWarnRule> select(FimWarnRule rule);

    int updateByPrimaryKeySelective(FimWarnRule record);

    int updateByPrimaryKey(FimWarnRule record);

    /**
     * 统计项目的报警规则
     *
     * @param deptId
     * @return
     */
    int countWarnRuleByDeptId(@Param("deptId") Integer deptId);

    /**
     * 查询项目的报警规则
     *
     * @param deptId
     * @return
     */
    List<FimWarnRuleDTO> selectWarnRuleListByDeptId(@Param("deptId") Integer deptId);

    /**
     * 查询默认的报警规则
     *
     * @return
     */
    List<FimWarnRule> selectDefaultWarnRuleList();

    /**
     * 批量插入
     *
     * @param warnRuleList
     * @return
     */
    int batchInsert(@Param("warnRuleList") List<FimWarnRule> warnRuleList);

    /**
     * 查找智能检测规则id
     *
     * @param deptId
     * @param type
     * @return
     */
    Integer selectByDeptIdAndType(@Param("deptId") Integer deptId, @Param("type") Integer type);

    /**
     * 根据组织机构ID查找报警类型列表
     *
     * @param deptId 组织机构ID
     * @return 报警类型列表
     */
    List<FimAlgCheckTypeDTO> selectAlgCheckTypeByDeptId(@Param("deptId") Integer deptId);

    /**
     * 根据类型代码删除算法类型
     *
     * @param type 算法类型
     */
    void logicDelectByDeptIdAndType(@Param("deptId") Integer deptId, @Param("type") Integer type);

    /**
     * 批量插入算法类型
     *
     * @param fimWarnRuleList 组织机构ID
     */
    int batchInsertAlgorithm(@Param("warnRuleList") List<FimWarnRule> fimWarnRuleList);


    /**
     * 查找项目配置的算法类型
     *
     * @param deptId 组织机构ID
     */
    List<FimAlgTypeDTO> selectAlgTypeByDeptId(@Param("deptId") Integer deptId);

    /**
     * 查找项目的智能检测类型
     *
     * @param deptId
     * @return
     */
    List<FimResultRateContDTO> selectCheckTypeByDeptId(@Param("deptId") Integer deptId);

    /**
     * 删除报警类型
     * @param deptId
     */
    void logicDelByDeptId(@Param("deptId")Integer deptId);
}